package main

import (
	"fmt"
	"time"
)

//数据竞争
//当两个或更多的操作必须以正确的顺序执行时，就会出现竞争状态，但如果程序没有写入，无法使操作顺序得到保持。
// 大多数时候，这出现在所谓的数据竞争中，其中一个并发操作尝试在某些未确定的时间读取变量
// 而另一个并发操作尝试写入同一个变量
func main() {
	var data int
	go func() {
		data++
	}()

	//停顿的做法比较糟糕
	// 我们解决了数据竞争问题吗吗？没有。事实上，从这个方案中产生的所有三个结果仍然是可能的。
	// 我们在调用我们的goroutine和检查数据值之间的让程序休眠的时间越长
	// 程序越接近实现正确性——但这只是在概率上渐近地接近逻辑正确而已
	time.Sleep(1 * time.Second) //通过停顿的做法,保证goroutine执行完毕,不推荐
	//程序必须等待1s才可以看到结果
	if data == 1 {
		fmt.Printf("the value is %v.\n", data)
	}

	fmt.Println(111)

}
